package com.ucar.train;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Classname generateOrderNo
 * @Description TODO
 * @Date 2019/7/25 14:08
 * @Created by Sixer
 */
public class GenerateOrderNo {


    //订单号前缀
    private final static String prefix = "CNO";
    //订单号长度
    private final static Integer numLength=22;

    /**
     * 生成订单号，如果数据库中最新的订单号不是今天的，则生成一个今天的新号码。如果是今天的，则进行递增操作
     * @param oldNumber
     * @return
     */
    public static synchronized String generate(String oldNumber) {


        //TODO：验证oldNumber的合法性
        if (oldNumber.length() != 22) {
           //订单号异常
        }

        String newNumber = "";
        //取当天时间
        Date date = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");

        //Ⅸ订单订单的日期
        String oldNumDay = oldNumber.substring(7, 11);

        //新订单的日期
        String newNumDay = formatter.format(date).substring(4, 8);

        //这个判断就是判断你数据取出来的最后一个业务单号是不是当月的
        if (!newNumDay.equals(oldNumDay)) {
            //新的一天，流水号初始化

            //生成新的订单，流水号从00001开始
            newNumber = prefix + formatter.format(date) + "00001";
        } else {
            //同一天，流水号递增

            //取订单中的流水号,流水号为后5位
            String latterNum = oldNumber.substring(oldNumber.length() - 5, oldNumber.length());
            //订单号中除流水号之外的部分
            String formerNum = oldNumber.substring(0, oldNumber.length() - 5);

            int icountNum = Integer.parseInt(latterNum) + 1;
            if (icountNum < 99999) {
                //当天订单量达到最大
                //TODO：当天订单达到上限的处理
            }
            //把int类型转换成string，不足5位的在左边补0
            String countNum = String.format("%05d", icountNum);
            newNumber = formerNum + countNum;
        }
        return newNumber;
    }
}
